package com.offics.loan.domain.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 用户信息实体
 */
@Data
@TableName("loan_user_info")
public class UserInfo {

    /**
     * 用户信息ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 姓名
     */
    private String name;

    /**
     * 身份证号
     */
    private String idCard;

    /**
     * 身份证正面照
     */
    private String idCardFrontImage;

    /**
     * 身份证反面照
     */
    private String idCardBackImage;

    /**
     * 手持身份照
     */
    private String idCardHandImage;

    /**
     * 支付宝账号
     */
    private String alipayAccount;

    /**
     * 支付宝信用积分
     */
    private Integer alipayScore;

    /**
     * 学历（0-未知，1-小学，2-初中，3-高中，4-大专，5-本科，6-硕士，7-博士）
     */
    private Integer education;

    /**
     * 单位名称
     */
    private String companyName;

    /**
     * 职位
     */
    private String position;

    /**
     * 单位电话
     */
    private String companyPhone;

    /**
     * 工作年龄
     */
    private Integer workYears;

    /**
     * 单位详细地址
     */
    private String companyAddress;

    /**
     * 月收入（单位：分）
     */
    private Long monthlyIncome;

    /**
     * 现居住详细地址
     */
    private String residenceAddress;

    /**
     * 联系人1姓名
     */
    private String contact1Name;

    /**
     * 联系人1手机号
     */
    private String contact1Phone;

    /**
     * 联系人1关系（0-父母，1-配偶，2-子女，3-朋友，4-同事）
     */
    private Integer contact1Relation;

    /**
     * 联系人2姓名
     */
    private String contact2Name;

    /**
     * 联系人2手机号
     */
    private String contact2Phone;

    /**
     * 联系人2关系（0-父母，1-配偶，2-子女，3-朋友，4-同事）
     */
    private Integer contact2Relation;
    
    /**
     * 补充资料，JSON格式
     */
    private String otherData;

    /**
     * 是否删除（0-未删除，1-已删除）
     */
    @TableLogic
    private Integer deleted;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 检查用户信息是否完善
     *
     * @return 是否完善
     */
    public boolean isComplete() {
        return name != null && idCard != null && idCardFrontImage != null && idCardBackImage != null
                && idCardHandImage != null && education != null && companyName != null
                && position != null && companyPhone != null && workYears != null
                && companyAddress != null && monthlyIncome != null && residenceAddress != null
                && contact1Name != null && contact1Phone != null && contact1Relation != null;
    }
    
    /**
     * 检查用户是否有补充资料
     *
     * @return 是否有补充资料
     */
    public boolean hasOtherData() {
        return otherData != null && !otherData.isEmpty();
    }

    /**
     * 检查用户是否有工作信息
     *
     * @return 是否有工作信息
     */
    public boolean hasJobInfo() {
        return companyName != null && position != null && companyAddress != null && companyPhone != null;
    }
}
